//给定字符串s和pattern，返回s中最长子串，要求该子串按顺序包含pattern中的字符，并且子串的字符可以重复
//比如pattern=abc，子串aabbcc abbc就行，aabb就不行，因为没有包括所有字母
//要求返回最长的，没有就返回null

//利用滑动窗口进行解答
public class Solution {
    public String findLongestSubstring(String s, String pattern) {
        int n = s.length();
        int m = pattern.length();
        String res = "";
        int maxLen = 0;
        for (int i = 0; i < n; i++) {
            int j = 0;
            StringBuilder substr = new StringBuilder();
            while (i < n && j < m && s.charAt(i) == pattern.charAt(j)) {
                substr.append(s.charAt(i));
                while (i + 1 < n && s.charAt(i + 1) == pattern.charAt(j)) {
                    i++;
                    substr.append(s.charAt(i));
                }
                i++;
                j++;
            }
            if (j == m && substr.length() > maxLen) {
                maxLen = substr.length();
                res = substr.toString();
            }
        }
        return maxLen != 0 ? res : null;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();

        String s = "scaewaabbccfaaabbbccccsdas";
        String pattern = "abc";

        String longestSubstring = solution.findLongestSubstring(s, pattern);

        if (longestSubstring != null) {
            System.out.println("最长子串: " + longestSubstring);
        } else {
            System.out.println("没有找到满足条件的子串");
        }
    }
}

//这个代码首先遍历字符串s，然后在每个位置上尝试匹配pattern。
// 如果当前位置的字符与pattern的当前字符相同，则进入一个内层循环，不断地向后查找相同的字符并将其添加到子串中，直到找到一个不同的字符或到达s的末尾。
// 然后将pattern的指针向前移动一位，继续查找下一个字符。
// 当pattern的所有字符都被匹配完，就找到了一个符合条件的子串。然后比较其长度与当前最长子串的长度，如果更长则更新最长子串。
// 最后返回最长的子串，如果没有找到符合条件的子串则返回None。